import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue'
import store from "@/store"
// 把这段代码直接粘贴到router/index.js中的Vue.use(VueRouter)之前
const originalPush = VueRouter.prototype.push;
VueRouter.prototype.push = function (location) {
  return originalPush.call(this, location).catch(err => { })
};
Vue.use(VueRouter)

const routes = [
  {
    path: '/',
    redirect: "/home"
  },
  {
    path: '/home',
    name: 'Home',
    component: Home
  },
  // {
  //   path: '/about',
  //   name: 'About',
  //   component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
  // }
  {
    path: '/goods',
    name: 'Goods',
    component: () => import(/* webpackChunkName: "goods" */ '../views/Goods.vue')
  },
  {
    path: '/user',
    name: 'User',
    component: () => import(/* webpackChunkName: "user" */ '../views/User.vue'),
    redirect: "/user/cart",
    children: [
      {
        // path: "cart",
        path: "/user/cart",
        component: () => import(/* webpackChunkName: "cart" */ '../components/user/Cart.vue'),
      }
    ]
  },
  {
    path: '/order',
    name: 'Order',
    component: () => import(/* webpackChunkName: "order" */ '../views/Order.vue')
  },
  {
    path: '/free',
    name: 'Free',
    component: () => import(/* webpackChunkName: "free" */ '../views/Free.vue')
  },
  {
    path: '/details',
    name: 'Details',
    component: () => import(/* webpackChunkName: "details" */ '../views/Details.vue')
  }
  ,
  {
    path: '*',
    component: () => import(/* webpackChunkName: "error" */ '../views/Error.vue')
  }
]

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})

/*

在进入到组件之前(切换路径)，我们可能需要做一些准备工作， 
我们会把这些工作的代码放在路由守卫（导航守卫，路由拦截）。
理解为：在进入这个路由之前/ 之后 拦截下来做一个工作
目前需求为：  用户在进入个人中心 /user 之前，需要判断是否已经登录（本地有没token），
所以需要把这代码写在导航守卫里面去
*/

// 全局前置导航守卫
router.beforeEach((to, from, next) => {
  // 什么时候执行这里的代码：  只要发生路由变化，就会执行这里的代码
  // console.log("执行了全局前置导航守卫的代码");

  // console.log("to为：", to);   // 要去到的路由对象 $route
  // console.log("from为：", from); // 从哪个路由对象出发
  // ...
  // 如果 要去的是 /user 需要判断是否已经登录（本地有没token）
  // if (to.path == "/user") {
  //   // 判断是不是已经登录
  //   let token = localStorage.getItem("x-auth-token");
  //   if (token) {
  //     // 有登录就放行
  //     next()
  //   } else {
  //     // 提示还没有登录
  //     store._actions["toastStatus/asyncChanIsShowToast"][0]({
  //       msg: "您还没有登录",
  //       type: "danger",
  //     });

  //   }
  //   return  // 需要在这里书写return， 防止上面判断有登录之后，连续执行两次next()
  // }

  next()  // next() 表示放行通过， 没有执行next() 就会跳转不过去
})

export default router
